home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ham Radio 2000
/
Ham Radio 2000.iso
/
ham2000
/
tcp_ip
/
jnos
/
jnos_src
/
xms.asm
< prev
next >
Wrap
Assembly Source File
|
1993-09-16
|
3KB
|
158 lines
; XMS routines to get available UMB's and HMA,
; and allocate extended memory.
; Written from the XMS 3.0 specification.
; (C) 1993 Johan. K. Reinalda, WG7J
include asmglobal.h
.data
XMS_Entry dd 1
.code
public Installed_XMS
public Request_UMB,Release_UMB
public Request_HMA,Release_HMA
public Query_XMS,Total_XMS
public Alloc_XMS,Free_XMS
public Move_XMS
Installed_XMS proc
mov ax,4300h
int 2Fh
cmp al,80h
jne NoXMSDriver
; Get the address of the driver's control function
mov ax,4310h
int 2Fh
mov word ptr [XMS_Entry],bx ;XMS_Entry is function entry point
mov word ptr [XMS_Entry+2],es
mov ax, 1
ret
NoXMSDriver:
xor ax, ax
ret
Installed_XMS endp
Request_UMB proc
arg sz:word
mov ah, 10h
mov dx, sz
call [XMS_Entry]
cmp ax, 1
jne request_failed
mov ax, bx ; UMB segment in dx
jmp request_done
request_failed:
mov ax, dx ; set actual size
mov dh, bl ; return error code
request_done:
ret
Request_UMB endp
Release_UMB proc
arg block:word
mov dx, block
mov ah, 11h
call [XMS_Entry]
cmp ax, 1
jne release_failed
xor ax, ax
xor dx, dx
jmp release_done
release_failed:
mov dh, bl ; return error in high byte
release_done:
ret
Release_UMB endp
Request_HMA proc
mov ah, 01h
mov dx, 0ffffh ; we're an application
call [XMS_Entry]
ret
Request_HMA endp
Release_HMA proc
mov ah, 02h
call [XMS_Entry]
ret
Release_HMA endp
Query_XMS proc
mov ah, 8
call [XMS_Entry]
xor dx, dx
or ax, ax
jnz QLSuccess
mov dh, bl
QLSuccess:
ret
Query_XMS endp
Total_XMS proc
mov ah, 8
call [XMS_Entry]
xor ax, ax
mov ax, dx
mov dx, 0
jnz QTSuccess
mov dh, bl
QTSuccess:
ret
Total_XMS endp
Alloc_XMS proc
arg sz:word
mov ah, 9
mov dx, sz
call [XMS_Entry]
xor ax, ax
mov ax, dx
mov dx, 0
jnz AESuccess
mov dh, bl
AESuccess:
ret
Alloc_XMS endp
Free_XMS proc
arg handle:word
mov ah, 0Ah
mov dx, handle
call [XMS_Entry]
xor dx, dx
dec ax
jz FSuccess
mov dl, bl
FSuccess:
ret
Free_XMS endp
Move_XMS proc
arg buf:dword
push ds
push si
; DS:SI = pointer to XMS move stucture
lds si, buf
mov ah, 0bh
call [XMS_Entry]
xor dx, dx
dec ax
jz MSuccess
mov dh, bl
MSuccess:
pop si
pop ds
ret
Move_XMS endp
END